/**
 * @file TransferData.h
 * @author 赵曦 (535394140@qq.com)
 * @brief 数据通信协议头文件
 * @version 2.0
 * @date 2021-11-01
 *
 * @copyright Copyright SCUT RobotLab(c) 2021
 *
 */

#pragma once

#include <bits/types.h>
#include <memory>
#include <vector>

//! @addtogroup protocol
//! @{

//! Transfer data used to communicate among objects
struct TransferData
{
    //! 移动姿态信息
    struct Translation
    {
        float x = 0.f;  //!< x 方向位置、距离（向右运动为正）\f$p_x\f$
        float y = 0.f;  //!< y 方向位置、距离（向下运动为正）\f$p_y\f$
        float z = 0.f;  //!< z 方向位置、距离（向前运动为正）\f$p_z\f$
        float vx = 0.f; //!< x 方向速度（向右运动为正）\f$v_x\f$
        float vy = 0.f; //!< y 方向速度（向下运动为正）\f$v_y\f$
        float vz = 0.f; //!< z 方向速度（向前运动为正）\f$v_z\f$
    } translation;

    //! 转动姿态信息
    struct Rotation
    {
        float yaw = 0.f;         //!< 偏转角（向右运动为正）\f$\theta_{yaw}\f$
        float pitch = 0.f;       //!< 俯仰角（向下运动为正）\f$\theta_{pitch}\f$
        float roll = 0.f;        //!< 滚转角（顺时针运动为正）\f$\theta_{roll}\f$
        float yaw_speed = 0.f;   //!< 偏转角速度（向右运动为正）\f$\omega_{yaw}\f$
        float pitch_speed = 0.f; //!< 俯仰角速度（向下运动为正）\f$\omega_{pitch}\f$
        float roll_speed = 0.f;  //!< 滚转角速度（顺时针运动为正）\f$\omega_{roll}\f$
    } rotation;

    //! 数据信息 @note 顺序与通信协议里 `uint8_t` 的顺序一致
    std::vector<uint8_t> data_u8;
    std::vector<float> data_f;
};

//! @} protocol
